{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "3a77bf2f-2be7-4260-a1df-5e1df9bfbc52",
   "metadata": {},
   "source": [
    "Chapter 08\n",
    "\n",
    "# 三维绕轴旋转\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2743c1b-5a9d-4493-88a9-594700d696a7",
   "metadata": {},
   "source": [
    "这段代码从数学角度展示了**三维旋转变换**对单位立方体的几何影响，使用了经典的三维旋转矩阵，分别绕$x_1$轴、$x_2$轴、$x_3$轴旋转一个固定角度 $\\theta = \\frac{\\pi}{6}$（即30度）。核心思想是：**将立方体的所有顶点作为三维向量，通过矩阵乘法实现旋转**。我们用三维线性代数中的旋转矩阵将单位立方体的点集 $\\mathbf{p}$ 映射为新坐标系下的点集 $\\mathbf{p'}$，即：\n",
    "\n",
    "$$\n",
    "\\mathbf{p'} = R \\cdot \\mathbf{p}\n",
    "$$\n",
    "\n",
    "这里 $R$ 是旋转矩阵，$\\mathbf{p}$ 是一个 $8 \\times 3$ 的矩阵，每一行是立方体的一个顶点。\n",
    "\n",
    "\n",
    "\n",
    "首先，使用 `numpy` 和 `matplotlib` 进行初始化，其中 `cube` 定义了单位立方体的8个顶点，坐标为 $[0, 0, 0]$ 到 $[1, 1, 1]$，排列顺序遵循标准三维空间立方体的角点布局。\n",
    "\n",
    "\n",
    "\n",
    "然后，对立方体依次施加三种不同的旋转。每一次旋转都定义了一个旋转矩阵 $R$，该矩阵是一个 $3 \\times 3$ 的标准**正交矩阵**，用来表达绕某个轴的刚性变换。具体形式如下：\n",
    "\n",
    "- 绕 $x_1$（x 轴）旋转 $\\theta$，使用的旋转矩阵是：\n",
    "\n",
    "$$\n",
    "R_{x_1} = \\begin{bmatrix}\n",
    "1 & 0 & 0 \\\\\n",
    "0 & \\cos\\theta & -\\sin\\theta \\\\\n",
    "0 & \\sin\\theta & \\cos\\theta\n",
    "\\end{bmatrix}\n",
    "$$\n",
    "\n",
    "这个矩阵作用在每个顶点上时，只会改变其 $x_2$ 和 $x_3$ 坐标，而 $x_1$ 分量保持不变。直观上，整个立方体绕水平轴进行旋转。\n",
    "\n",
    "\n",
    "- 绕 $x_2$（y 轴）旋转 $\\theta$，使用矩阵：\n",
    "\n",
    "$$\n",
    "R_{x_2} = \\begin{bmatrix}\n",
    "\\cos\\theta & 0 & \\sin\\theta \\\\\n",
    "0 & 1 & 0 \\\\\n",
    "-\\sin\\theta & 0 & \\cos\\theta\n",
    "\\end{bmatrix}\n",
    "$$\n",
    "\n",
    "这会保留 $x_2$ 分量，旋转 $x_1$ 与 $x_3$ 方向。立方体绕竖直方向横向旋转，表现为从正面斜向转动。\n",
    "\n",
    "\n",
    "\n",
    "- 绕 $x_3$（z 轴）旋转 $\\theta$，使用矩阵：\n",
    "\n",
    "$$\n",
    "R_{x_3} = \\begin{bmatrix}\n",
    "\\cos\\theta & -\\sin\\theta & 0 \\\\\n",
    "\\sin\\theta & \\cos\\theta & 0 \\\\\n",
    "0 & 0 & 1\n",
    "\\end{bmatrix}\n",
    "$$\n",
    "\n",
    "这是二维旋转矩阵在三维空间中的扩展，保留 $x_3$ 分量，只旋转平面 $x_1$ 和 $x_2$ 方向，立方体在视图中绕自身垂直轴转动。\n",
    "\n",
    "\n",
    "\n",
    "每个旋转过程都将原始立方体点集与旋转矩阵 $R^\\top$ 进行矩阵乘法，即：\n",
    "\n",
    "$$\n",
    "\\mathbf{P}_{\\text{rotated}} = \\mathbf{P}_{\\text{original}} \\cdot R^\\top\n",
    "$$\n",
    "\n",
    "这里用 `.T` 是因为原始点按“每一行一个点”组织，为了与列向量形式的线性代数一致，需使用转置。\n",
    "\n",
    "\n",
    "\n",
    "函数 `plot_cube` 统一用于可视化旋转前后的立方体。它绘制了两个立方体的框线：变换前为灰色虚线，变换后为黑色实线；每个顶点也被用彩色圆点标出。边的连接方式由 `edges` 列表定义，确保12条边按逻辑连接8个顶点。\n",
    "\n",
    "\n",
    "\n",
    "坐标轴被设置为正交投影 (`ortho`)，防止透视造成的视觉扭曲；三轴范围固定在 $[-2, 2]$，统一视角角度方便对比变换效果。\n",
    "\n",
    "\n",
    "\n",
    "总结来看，这段代码以三维立方体为例，从数值和图形两方面生动演示了**绕三轴旋转的几何效果**，帮助理解三维旋转矩阵的结构与作用，是线性代数与图形学融合的经典案例。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "92875576-e64d-4ba2-bb3d-c8ce140e2ad7",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f1588ae2-f111-497f-90b1-197f06bd5ea4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8a274e8-1e92-42e8-86a2-66927962b471",
   "metadata": {},
   "source": [
    "## 可视化函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bbc647f8-9bbf-4382-af7a-258d1c1e5eda",
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_cube(ax, original_cube, transformed_cube):\n",
    "    colors = original_cube\n",
    "\n",
    "    # 定义每个卦限的框线顶点对\n",
    "    edges = [[0, 1], [1, 2], [2, 3], [3, 0], \n",
    "             [0, 4], [1, 5], [2, 6], [3, 7],\n",
    "             [4, 5], [5, 6], [6, 7], [7, 4]]\n",
    "    \n",
    "    # 绘制原始立方体框线\n",
    "    for edge in edges:\n",
    "        ax.plot(*zip(*original_cube[edge]), color=\"gray\", linestyle=\"dotted\")\n",
    "    \n",
    "    # 绘制变换后的立方体框线\n",
    "    for edge in edges:\n",
    "        ax.plot(*zip(*transformed_cube[edge]), color=\"black\", linestyle=\"-\")\n",
    "    \n",
    "    # 绘制顶点\n",
    "    ax.scatter(original_cube[:,0], original_cube[:,1], original_cube[:,2], \n",
    "               facecolor=colors, s=50, marker='o', edgecolor='k')\n",
    "    ax.scatter(transformed_cube[:,0], transformed_cube[:,1], transformed_cube[:,2], \n",
    "               facecolor=colors, s=50, marker='o', edgecolor='k')    \n",
    "\n",
    "    ax.set_xlim(-2, 2)\n",
    "    ax.set_ylim(-2, 2)\n",
    "    ax.set_zlim(-2, 2)\n",
    "    ax.axis(False)\n",
    "    ax.set_box_aspect([1, 1, 1])  # 确保 x, y, z 轴比例相同\n",
    "    ax.view_init(elev=30, azim=30)  # 统一视角\n",
    "    ax.set_proj_type('ortho')  # 设置为正交投影\n",
    "    ax.plot((-2,2),(0,0),(0,0),color = 'k')\n",
    "    ax.plot((0,0),(-2,2),(0,0),color = 'k')\n",
    "    ax.plot((0,0),(0,0),(-2,2),color = 'k')\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7852f7d-472d-4f88-b31b-2e92cad8b64c",
   "metadata": {},
   "source": [
    "## 定义单位立方体的 8 个顶点坐标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6fd76090-c8e9-44ca-99c4-5f2139308a3c",
   "metadata": {},
   "outputs": [],
   "source": [
    "cube = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0],\n",
    "                 [0, 0, 1], [1, 0, 1], [1, 1, 1], [0, 1, 1]])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa394652-f004-4195-8430-a3b27a9d0206",
   "metadata": {},
   "source": [
    "## 绕 x1 轴旋转"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "075fa40b-ce63-4e05-b7c5-ca87105b66a3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAGVCAYAAADZmQcFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEh0lEQVR4nO3dd3RU1doG8Gdm0hMICYFQhQChBIJ0CL2TBoTei17AgoqC6AX8FEEFsVCvigUVhCCI0jIJVaQlhACBhN4CIQ3SSSHJzLzfH5FzmRsQAocUfX5rZS0zZ845+8zCebLP2fvdGhEREBERPSFtaTeAiIj+HhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqcKitBtAVB6JCHJycgAAdnZ20Gg0pdwiotLHHgrRY8jJyYGDgwMcHByUYCH6p2OgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREanCorQbQPRPJCK4dOkSdu3ejWvx8bDU6dDcwwO9e/eGs7NzaTeP6LFoRERKuxFE5U12djYcHBwAAFlZWbC3t3/kffPz87Fk2TJsOXIEmVWqwMLDA6a8PMiJE6hmMGD6xInw9vZ+Wk0nemrYQyEqYUtXrMDaEyfgPG0aGnXsCI228M6zMTcXsevX44PvvoOdnR26du1ayi0lKh4+QyEqQVeuXMGW0FA4vfgiXDp3VsIEAHS2tqgzcSKyvLzwXWAgTCZTKbaUqPgYKEQlaM+ePcioXBkuHTsWviCC09HRiIqKAgBoNBpUHzgQZ5OTcfLkyVJsKVHx8ZYXUQm6Hh8PNGiAhKQkJCYk4Nr16zAaDAAAd3d32NjYwKF+fcRZWiIhIQEtW7Ys5RYTPToGCtFTJiK4ePEi9Ho9An/6CVfatYPUqVPkfQkJCXBzc4OpoAAwGmFhwf89qXzhv1iipyA3Nxf79u2DXq9HcHAwLl++/N+NlpbQ+vnBZGkJAHCpUgXJt27hwoULqFu3LlLCwlDJZELTpk1LqfVEj4eBQqSSq1evQq/XQ6/XY+/evbhz546yzdLSEt26dUOHDh2w7McfkblnD+Djg7Zt26JGjRrQBwXhdmYmrp07h9yNGzHY0xM1a9YsxashKj4GCtETmjVrFnbt2oVz586ZvV6rVi34+vrC19cXvXr1QkJCAnx9fZEZGwtdcDCecXVFpSZNYGFhgfp16+Lc5s2I+u47DKxRAy/NmlVKV0P0+DixkagYYmNjERwcjK1btyIoKMhsm06nQ+fOnZUQadq0KTQaDQDg4MGDCAgIQEpKCurWrYuFCxdi7+HDOBkfjxyNBiaDAefCwmBMSsLXX32FyZMnl8blET0RBgrRXygoKEBoaKhyK+vu8N57jR07FgMHDkTv3r1RqVKlItvXr1+PCRMmID8/H23btsW2bdvg6uoKEcHZs2cRHx8PnU6H7du34/PPP4enpyciIyOh1XJUP5UvDBT620lOTkZqaiq0Wi2qVq2KihUrFmv/hIQEhISEQK/XY9euXcjIyFC2abVatG/fHr1798b8+fMBPLj0iojg448/xqw/b18NGjQIP/30E+zs7O573rS0NNSpUwe3b9/Gr7/+ikGDBhWr3USljc9Q6G8jISEBBw8eQXT0Ldy+XfiakxPQsmUtdO7sdd/eAwAYjUaEh4crvZDjx4+bbXdxcYG3tzd8fX3Rs2dPJCQk4MCBMAD2AIzYs2cPunTpAicnJ2WfgoICvPzyy/j2228BAG+88QY++eQT6HS6B7bfyckJr732Gj788EPMmzcPAQEByi0zovKAPRT6W4iNjUVg4E7cuFEFNWq0gJNTTZhMJqSkxCAp6QQaN76D0aP7K1/6ycnJ2LFjB/R6PUJCQpCammp2vDZt2ijPQtq0aQOdTof09HR8/fVqREQk486dOti2bT+AAvj7N0adOiY8//wAtGrVCpmZmRg2bBh27twJrVaLpUuX4pVXXnmk67j7jCUrKwubN2/GwIED1f6oiJ4aBgqVewaDAV9/vQ4XL7qiceM+RZ49GAz5OH16C2rVuo78/Gzo9XqEh4fj3n/6jo6O6NevH3x9feHt7Q1XV1ezYxQUFGDx4i9x6JARDRqMgaVlJXz88UIAwJtvTkds7O+oWDECY8b0xKuvvoqoqCjY2dlh/fr16N+/f7GuZ/bs2ViwYAFatWqFiIgI9lKo3OAtLyr3rly5gqtX8+Dm5qWESX5+PtLS0hAbG4uoqCicOnUY2dnBAOKU/Z599lmlF9KhQ4e/nJkeHR2NiIgUNGjwCuztqyA/P1/ZptNZwd3dH4cOXcLAgUOQkZGCatWqYfv27WjdunWxr2f69OlYtmwZjh8/jqCgIPj7+xf7GESlgYFC5V5cXBzy86vC1rbw4fuhQ4ewevVqiNxbrVdgaVkTnTs3xOjRo+Ht7Y1atWo98jmOHDkOo7EB7O2r3Hf7pUuXcOBALAwGGzRq1Ag7duxAnfuUV3kULi4umDp1KhYtWoT3338ffn5+pdZL0ev10Ol06NevX6mcn8oXBgqVe0ajEUBhGZPExERs2bJFCZNKlZzQtm1beHp6Ij//CCZObPZYvYaEhDTY2bUCAJhMJly8eFHZFhIS8mdlYBtUreqGtWuXPHaY3DVjxgysWLECERERCAkJgY+PzxMd73F8+eWXeOWVV2BnZ4ejR4+icePGJd4GKl840J3KPUdHRwDJOHfuLBYuXIj09DRYWBQGTM2aNTFs2DDUrVsTNjb5f763+GxsLGEw5AIoHN6blJSkbDt5MhKAwMOjMbp374KwsDAcO3YMhj+rCD+OqlWr4qWXXgIAvP/++yjJR50mkwkzZ87Eyy+/DJPJhGHDhqFevXoldn4qvxgoVO41bNgQ8fHhWLJkLnJysuHmVg8zZ86ERqPF6dPRuHr1Km7cOIU6daxRt27dxzpHixYNkZsbBZPJgMqVKxeps9W9ew88+6wrnJ2NSEpKwt69e80GB2RkZPzZk3p0M2fOhK2tLY4cOYKdO3c+VruLKzc3FyNGjMCnn34KAPjggw/w3XffwcrKqkTOT+UbA4XKNRHB8uXL8csv/4HJFA0Pj9qYPn063Nzc4OXVAYAJGzZ8AZ3uDLp1a/nYJeHr1q0LV9csXLmyC1lZWTh48ICyzd/fH88+Ww95eUfRp0/hpMf27dubBcqGDRvwySef4MqVK498TldXV7z44osASqaXcuvWLfTs2RO//PILrKys8NNPP2HOnDkcZUaPjIFC5VZBQQEmTZqE//u//wMADBvmiSFDXHHhwq+4ePEAGjd2BHAKly//iCZNbODp6flY57lw4QJ+++031Kljh7y8YKxc+QLi46MA5APIho1NPK5f/x69ernC398fXbt2NVsPPj8/HxkZGcjLy0OVKv99qH/lyhXs3bsXCQkJDzz3zJkzYWNjg9DQUOzZs+ex2v8ozp8/jw4dOiAsLAxOTk7YuXMnxowZ89TOR39PfChP5VJGRgaGDh2K3bt3Q6vVYvny5Xj55Zdx69YtnD17FgkJKdBqdYiPd0FISAQ2btyIcePGPda5rKysYDQakZeXh927f0ROTi7s7esjO9sEwIgaNazh49MRPXv2vO+tISsrK0yfPh23bt1ChQoVlNejoqIQGRkJg8GA6tWrAyjsceXm5irlWapXr44pU6Zg2bJleP/999GrVy/Vewz79+9HQEAA0tLS4ObmhuDgYDRq1EjVc9A/hBCVMzExMdK0aVMBIPb29rJ9+/YHvvfcuXOi1WoFgBw7duyxz7ls2TKxsrISANKuXTsJCwsTAAJAUlNTH+uYZ86ckY0bN0pMTIzy2s2bN2Xu3Lny/fffi8lkEhGRuLg4sba2FgCyZ8+ex76G+1m7dq1yXe3bt5ekpCRVj0//LAwUKlciIiKkWrVqAkCqV68ux48ff+g+o0ePFgASEBBw3+0mk0l27dolAQEBYm9vLzqdTmrVqiXz58+XlJQU+eCDD5TwGDx4sOTk5EhWVpbyWlZWlmrXd/z4cZk7d66sWbPG7PWhQ4cKAOnSpYsq5zGZTPe9LqInwUChcmPr1q1iZ2cnAMTT01OuX7/+SPudOXNGNBqNAJDIyEizbSaTSaZNm6Ycc8GCBfLFF1/ImDFjxMrKSipWrKh86c6YMUOMRqOIyFMLFBGRjIwMs55Cfn6+zJw5U3Q6nQCQffv2Ka/f7cUUR35+vjz//PP3vS6iJ8FAoXJh+fLlyq2rvn37SkZGRrH2HzlypPKX+L2WLFkiAGTFihVFvpyvXbsm9evXFwsLC1myZInZtrS0NOULOS0t7bGu6VHl5OTIjh07pGfPngJAevToISIiO3fulM8+++yReml3paenS58+fQSAaDQamTBhgqxatUq2b99e7M+U6H+xOCSVaUajETNnzsTixYsBAJMmTcIXX3wBS0vLYh3n9OnT8PT0hIjg1KlT8PT0hMFgQN26ddGvXz989913D9yvWbNmWLt2LUaPHq28npaWBmdnZwBAamqqWen6p+X69eto0KABCgoKsH//fpw7dw7x8fEYMmQImjVrBgDIzs7GyZMn4e7ubjai7O7+fn5+iI6OhoWdHdzatYNl3brQ2tsDSUmoptFgjJ8fxo8bx8W96PGUcqARPVB2drYMGjRI6Ql89NFHj3WL565hw4YJABk2bJiIFP6Fj0d4WN+jRw/p16+f2WuZmZlKuzIzMx+7TcU1ZcoUASC9e/eWgoICuXTpkuTm5irbIyMjZe7cubJy5Uqz/Y4ePao8e7KuXFnqTpki3U+ckIEmkwSIiF9GhrT9+WfxHDxYli1f/kSfM/1z8c8QKpOSkpLQo0cP/Pbbb7CyskJgYCBmzZr1RENm785X+eWXX3D69GkkJiYCADw8PP5yPw8PjyJzRe79C74k/5qfNWsWLCwssHv3boSHh6N+/fqwsbFRttvb26NBgwZmdbe2bduGTp06ITExEVVcXVF74EA0++wzVGrRQvk8LStWRM3hw1Hx5Zexds8enD9/vsSuif4+GChU5pw9exYdOnRAeHg4nJ2dsWfPHowcOfKJj+vp6YlBgwZBRDB06FDMmTMHABAfH/+X+8XFxRV7GeGnpW7dupg4cSIAYN68eUW2N2jQAGPGjFEmVn7xxRcICAhAfn4+3Nzc4N6uHaoMHQoLBwfkZGcjOysLYvpvVWaXnj2RWa0a9MHBJXI99PfCQKEyZd++fejYsSNiYmJQv359hIaGonPnzk90zPj4eHz33XcYMmSIUhPr3LlziI2NhU6nw6pVqx64b1JSEoKCgjBkyBCz1033fAnf+98lYdasWdDpdNixYweOHDly3/eYTCbMmDEDU6dOhclkwtixY/Hhhx8iW6eDU7t2AIDklBTExsYiPT1d2U+j0cCmXTucunSpJC6F/mYYKFRmrFmzBn379kV6ejq8vLwQGhqKhg0bFvs4BoMBBw8exOzZs9GyZUvUrFkTkyZNwq+//ors7GylnlerVq0wZcoUfP755zhw4ECR4+Tm5mLixImwtbXFhAkTipzjfv9dEurVq4fx48cDKKzx9b9ycnIwbNgwfP755wCAjz76CKtXr0aDBg0K36DRQERgZWVVuMb9n78r/vd3okdVuo9wiArngrz//vvKQ+5hw4YVe5JdUlKS/PjjjzJixAipVKmSciz8OTy2ffv28v7770t4eLh89tlnAkC0Wq1ERkZKjx49xMrKSp577jnZvXu3hIeHy9KlS8XNzU2sra1l165dRc5XksOG7+fSpUvKvJTw8HDl9aSkJGnXrp0AECsrK1m3bp2y7ebNm9Jl0CBpFxQkLWNixC8vTwL+fCh/92egySRNXnlFFi5aVOLXROUfA4VKVV5enkyYMEH5cn777bcfaZKd0WiUI0eOyHvvvSdt27Y1CxAA4uTkJKNGjZI1a9bIzZs3zfY1GAzi4+MjAGTcuHFy584dWbBggdSpU0fZX6fTiUajkUaNGt13xNPTnNj4qMaPHy8AxN/fX0REzp49K25ubgJAnJ2dZf/+/UX2mTt/vlQfO1Yanjghba5fNwuTABHpcvCgtA0IkFOnTpXkpdDfBAOFSk1aWpoyWU+n08lXX331l+9PSUmRdevWybhx46RKlSpFQqRVq1byzjvvyKFDh8RgMCj7hYaGil6vNwuGiIgIpZdy4cIFESkMmrNnz8qJEyfkwoUL4uDgIABk8+bNRdpSFgLlwoULymTPlStXKj2z+vXry/nz5++7T0xMjPQbNkxqvvCC9DhzRvpmZUnfrCzxz8mRDkFB0mzYMFm4aBGHDdNj4cRGempEBJGRkTh69Cju3LmDqlWronfv3nBxcUFMTAz8/Pxw5swZODg4YMOGDUWWub27v16vh16vR1hYmNkD8IoVK6Jv377w8fFB165dUaVKFVSoUMFsGG9iYiJWrlwJABg7dizq16+vbPP390dQUBAmTJiAH374oUj7Z8+ejQULFqBVq1aIiIgwG7KcnZ0NBwcHAEBWVhbs7e1V+cyKa9y4cfjpp5+g+fO5h5eXF7Zs2WI2qVFEkJycrLx26dIlzP/0U0QlJuKGlRXg4ACXO3fgcucOhvfqhRemTCn2xFEiAGCglCMXLlzAjh074Ovra/bFWBZdvXoVH737Ea5HXkfV3KqoqK2IG3ID+c75aNq5Kdb8tAY3b95EzZo1ERQUhGeffRZAYVn63bt3Q6/XIzg4uMj8j2bNmsHX1xe+vr5o3bo1tm3bhg1rNuDK2cKFq1xruWLouKEYMWKEstxvaGgoTCYTOnbsaBYK4eHhaN++PXQ6Hc6fP1/kM01OTkbdunWRnZ2Nbdu2wd/fX9mWkZGBSpUqAQDS09Mfe2nhJyEimDZtGpYvXw4A6NOnD7Zs2QJbW1vlPUajEdu3b0dUVBTGjx+PZ555BkDhKLDw8HAsXboURqMRAwcORJ8+fVC1atUSvw76Gym1vhEV273VYRs2bCivv/667Ny5U+7cuVPaTTMTGxsrg/sOlpfqvSSnvE6JqY9JpK9ITq8cWVV3lTTUNBQNNEqBx6ioKPn444+lW7duYmFhYXYby97eXgYOHCgrV640KwaZnZ0tE8ZMkBauLWRG1RkSVDdIdrrtlPdd35e2Lm3Ft5evJCQkPLSt3t7eAkCef/75+25/6623BIC0adPG7DZQamrqE5evfxJ5eXkyceJEs8/qftWUjUajBAYGyvvvv1+sml9Ej4OBUo4EBgZKjx49inzp2tnZyYABA+TLL7+Ua9eulXYzZd7ceTKh3gS53fO2SF9RfmIaxUgIQuQTfCL1bOrJgAEDpHbt2kWehTRq1EjeeOMN2bVr1wPDcva/Z4tXFS+JdI8UaS7KT4FHgUS6Rko3h24ycvDIhz4LCA0NFQBiYWEhV65cKbI9KSlJqXCs1+uV1zMyMpT2lnRRxXufPWm1Wnn33XeVasonT54s8v68vLz7XhuR2hgo5VBGRoZs2rRJ/vWvf0n16tWLfCE3bdpUZs6cKb///rvk5+eXaNtSUlLEu523bGmxRQkSYx+jRLhESAhClJ8e6CEaFH4J2tjYiK+vr6xYsUIuX7780HMkJSVJi/otZF3tdWZhIs1F8j3yJbFaooS4hIhnDU85evToQ4/Xt29fASCTJ0++7/YZM2YoC1DdDajSeigfExMjHh4eAkAcHByUkBs+fLgAkKFDh0p8fLyEhoaWWJuI7uIzlHJO/qyee/fB9eHDh4s8uO7Tpw98fX3h7e2NGjVqPNX2REREYM64OVjjugZVravCYDRg7969RSbK7bXci5DaIVi4YiG6d+9udt//YdauXYslbyzBPtd9sNf+92F4Xl4etDotxCTQ6XQIuBmAdq+2U2p4PcihQ4fQuXNnWFhY4NKlS6hTp47Z9qSkJLi5uSE3NxchISHo169fqTyUj4iIQP/+/ZGYmIgaNWogKCgILVq0AABER0fD09MTAPDaa6/B2dkZw4cPR5MmTR54vIKCAqxfvx4AMHLkSD6IpyfGmfLlnEajwbPPPotZs2bhwIEDuHXrFtavX4/x48ejSpUqyMzMxKZNm/Cvf/0LNWvWRMuWLTFnzhwcOnSoRGZ463Q6ZdSVhc4CjRo1QudOneHu7o4WLVrAx8enWGECFD4Ed9Y6m4WJQJCRmYGUlBTlvDWlpllZkQfp1KkTevXqBYPBgAULFhTZ7urqihdffBFA4cx0KezZ//fcJfA32datW9GtWzckJiaiefPmOHLkiBImQOFghaFDhwIATp48iXr16sHNze0vjykiuHLlCq5cucKZ8aQKBsrfjLOzM0aMGIEff/wRiYmJCA8Px9y5c9G+fXtoNBpERkbio48+QufOnVG1alWMGjUKa9aswa1bt1Q5f7169aCtqEVYRhgAQAMNWrZoCQAwGA1wcnKCnZ0djtw5Avdn3R/rHI6OjkiTNGSbspXXxCSwtLSEVquFpZUlRARxmjjcvn0ba9aseWj13Pfeew8AsGrVKsTGxhbZPnPmTNjY2CA0NBR79uxBQUGBsu3e/34ali9fjoCAAOTk5KBfv344cOAAatWqpWwXERiNRqUntn//frRo0cKsCvH9WFhYYNCgQRg0aJBSjoboSTBQ/sa0Wi3atm2L9957D2FhYUhKSsKaNWswatQoODk5IS0tTenNuLq6on379nj//fdx9OjRxy546OzsjI6+HbEpcxOyDFkAgMqVK6NG9cJbbZcvX8YfaX/guv119B/Y/7HO0bt3bxQ4FGB75naza3Wq5IQqVapAAw2O5R7DdavrqF69Oq5cuYKMjAzlvQUFBbh06ZJZEHTp0gXdu3dHQUEBFi5cWOSc1atXx5QpUwD8t5fytBmNRrzxxht47bXXICKYPHkytm3bZlb5uKCgABs3bsTmzZvNqinfr6f1v7RaLZo3b47mzZtzQS1SR2k8uKHSV1BQIIcOHZI5c+ZIy5YtizzYr1KliowbN04CAwMlJSWlWMe+ceOGDOk3RF6s96JEekWKqY9JsjpnyRZskXfwjvR6ppd8OP/DJ5qN/e+3/i1eVbwkumG0mJqbJK9xnuQ1zhNTc5PEN4kXXxdfGR4wXG7evCmHDx+W9PR0Zd8LFy7I3LlzZcWKFWbH/P3335UaWLGxsUXOGRcXJ9bW1gJAtm/f/lQfymdnZ0tAQIByjoULF97387p+/brMmzdP5s+fLwkJCXLixAmlftnZs2dVbxfRX2GgkIgUfll+9913MmTIEKlYsaJZuGi1WunUqZN8+OGHcuLEiUcKgitXrsjk8ZOlb7O+Mqb+GHmxwYvSzqGdOMFJPD09paCg4Inam5WVJeNGjZNWrq1kZpWZsr7SetnktEnmu86XDlU6iE9PH4mPj7/vvqdOnZLPPvtMtm3bZvZ6YGCgeHp6CgB59dVX77vv1KlTBYB07tz5qQVKYmKiUp/M2tpa1q9f/5fvP3nypMTExCi/Dxw4UADI2LFj/3I/o9EoN27ckBs3bjxS/TSih+EoLyqioKAAhw8fVkaORUdHm22vXr06fH194ePjg969ez9wlriIICoqCkeOHMGdO3dQUFCAGTNmAAAiIyOV2fGPKy8vDxs2bMD6H9fj7ImzAIC6DetiyNghGDNmjDKT/UFtKygogJWVFYDCB/1Lly7F1atX8eOPP8La2hpXrlyBtbU1LC0tldtMN27cQP369ZGfn68cS81RXmfOnIGfnx9iYmJQuXJlbNmyBZ06dTJ7z/Xr11G5cuUHnvPYsWNo06YNtFotzp49+8AlAPLz85VbY7NmzVI+C6LHVrp5RuXBtWvX5KuvvpIBAwYok/zu/lhYWEj37t1l0aJFEh0d/dDey8iRIwWADB48WLX2mUwmSUtLk+Tk5Mf+SzsvL0+io6Nl37590qlTJwEg06ZNkw0bNsjcuXMlLCxMee9LL71k9hncezvtSezdu1ccHR0FgDRo0EApWnmvM2fOyLx58+Tbb7/9yzlG/v7+AkDGjx//wPfk5+fL4sWLZfHixSU+X4n+nthDoWLJy8vD/v37ERwcDL1eX2T01DPPPKPU2urZs2eRv6JPnz4NT09PZf7M3bkTZcmuXbvQt29f2NjY4NNPP0VycjL+9a9/KSOrjh49ig4dOigDF1JTU+Hk5PRE51y9ejUmTZqEgoICdOrUCZs3b4aLi0uR9yUnJ+O7775DvXr1EBAQ8MC5I0ePHkW7du2g1WqxePFi2NrawtraGs2bN4enp2fhwlpEaivlQKNy7tKlS7J8+XLx8fERGxsbs7/crayspG/fvrJkyRKzv7aHDRumLKRVFplMJunQoYMAkOnTp0t2drZZz+f333+XFi1aFCm9kpSUVOwekslkkrlz5yrHGjFihOTm5v7lPikpKQ/tCWZnZ0vjZo0FtSDVhleT7l92l+4fdxfvV7xlxv/NMKuLRqQW9lBINTk5Odi3bx/0ej2CgoIQExNjtr1+/frw9fVFkyZN8PLLL0Oj0SAqKgpNmzZ9ovM+jRnfISEhyqTLq1evwtXVVdmWlJQEvV6P559/HgCwe/dudOrUCYsWLYKNjQ1eeeUV2NnZPfQc+fn5mDx5MlavXg0AaNy4MZydneHg4IABAwZg3LhxsLKywpYtW9CjR49HrgRsMBjwyZJPsPHKRpyoeAKoAYybMA6Ojo7IisvC1cCraHyzMea9OY/VhUlVHHxOqrGzs4Ovry9WrFiBK1eu4OzZs/jss8/Qu3dvWFpa4vLly1i+fDlefvll6HQ6iAgmTJiAq1evPtF55SnM+O7Xrx/atWuH3NxcfPbZZ2bbXF1dMXz4cOX3BQsW4NatW7CysoKdnZ1ZmISGhmL//v1IS0szO0ZaWhq8vb2xevVqZVKhjY0N3N3dodPpMG3aNNSpUweLFi3CuXPn8MsvvzzytR07dgz7ru2D59ueeMbrGUADHIs4BgBwqOmAJlOb4KztWWwP2o7169dj/fr1JVI1gf7+2EOhEnH79m3s3btXGTl248YNs+1NmjRRnr107ty5WCOOTCaTMhKtWbNmqk3S0+v18PPzg52dHWJiYswWrcrKykKFChWU38PCwtCmTRtkZmYqz1NEBMuWLUN6ejpGjRqljLY6f/48AgICcO7cOVhaWqJKlSr4+eef0alTJ2W9lri4OEyePBm///47/v3vf+OFF15AtWrVHqndCz9fiF02u+DxsgcSEhKw6ZdNgAYYMGCAsh5K7J5Y2G2xg1sFN1hZWXGUF6mCgUIlTkQQHR2NkSNH4syZM8pqg3c5ODigd+/eytDke8uMlHQ727Vrh4iICLz99ttmM+jT0tLg7Oys/O7j4wO9Xm+2v8lkwokTJ3D58mUEBATAysoK4eHh8PHxQWpqKuzt7ZGTk4PIyEg0b968yPnv3LmD1q1bo0GDBtiyZcsjt/tfb/4Lt/rdgqahBjExMYiKjiosTWNliSlTpkCj0SArLgs3F9zEi/1eRI0aNdCiRQs+qKcnxkChUnPixAm0atUKGo0GixcvxsmTJ6HX65GUlGT2vubNmyu9Fy8vrxKtO7Vt2zYMGDAA9vb2iImJUUZe3RsoWq1WWQGxbdu2DzzW5s2bMXr0aOTm5qJatWpwdHRE/fr1ERQU9MB9vv76a7z00kuIjY19aKXomJgY6PV6LPxqIeK6xcHU0Lx8jpW1FSZPmgyNVoPMa5lI/TQV/5n5H6XXQvSk+AyFSk3Lli3Rv39/iAiOHTuGVatWIT4+HseOHcP8+fPh5eUFjUaDU6dOYeHChejatStcXFwwYsQI/PDDD0hMTARQ2BOIi4tDXFzcY9cgexB/f3+0bNkS2dnZWLx4sfL6vbeHRowYAQCYN2/eA4+zdOlSDB48GLm5ufDx8cGRI0dw8+ZNdOnS5S/P37VrV5hMJly+fLnItvz8fOzduxdvvvkmPDw84ObmhqlTpyI2OhamSyZotH8ud6wB2rZrW9g7+fO1lJMpqGFb45FvoxE9CvZQqFTdO6v73LlzcHc3r0CcnJyMnTt3Qq/XIyQkRClPf1fr1q3Rr18/JCUloWbNmpgzZ47qzwI2b96MQYMGoUKFCoiJiYGzs7PZeiiRkZFo1aoVTCYTIiIi0Lp1a2XfuwUe7677/uKLL2L58uWwsLBAtWrVMHnyZMyfP/+B546IiEDbtm0RFhaG9u3bIy4uTpkDtGvXLmRlZSnv1el06NixI9zd3REYGohc/1xY1rOEt4+32RovubdycfmTy5jabiq6du0KAIVFNf98fkP02Ep4mDJREX5+fgJAJk6c+JfvMxgMEhoaKu+++660adOmSEFLe3t7GTVqlKxdu1aSk5NVa5/JZJJnn31WAMg777wjIkVXbBw7dqwAkIEDByr7ZWVlSf/+/ZX3LVq0yGz+yMiRI8Xd3f0v567MmDFDHB0d5c0331TacO9P1apVZcKECfLzzz9LamqqhIeHS9WqVQvnAbWwkq7rusqUjCnyirwiL+W/JEPDhkq32d1k9rzZkpqaKnPnzpW5c+dKXl6eap8X/XOxh0KlLjw8HO3bt4dOp8P58+dRv379R9ovKSkJISEh0Ov12LFjh1mJeo1Ggw4dOigP9lu2bPlEo79+/fVXDBkyBBUrVkRMTAy0Wq1SKyw9PR0JCQnw8PCAiODEiROoVq0a/P39cezYMVhbW2PNmjUYNmyY2TEPHjyILl26YNmyZXj11VeLnDM6Ohrt27dHTk6O2XW1b99eua5WrVop17VlyxaMGjUKubm5aN68OV597VUcOnMINww3YHIwQXIFLgYXdG/aHeNGj4O1tTWWLl0KAJg2bRpHedGTK+VAIxIREW9vbwEgzz///GPtX1BQIPv375d///vf0rx58yJ/ybu6usrEiRNlw4YNkpaWVuzjG41GadasmQCQ9957T1JTU5Vjp6amiojIqFGjBID06tVLnnnmGQEgLi4ucujQoQce94033hAAMmXKFKUWWnJysnz66adSsWJF0el04uTkJKNHj5affvpJbt26dd/jLFmyRDQajQAQb29vyczMFBGRnJwcOXz4sOj1etm7d+8D9ydSAwOFyoTQ0FCl2OSVK1ee+HixsbHyzTffyKBBg8TBwcEsXHQ6nXTt2lUWLlwop06deuR1WTZs2CAAxNHRUcLDw5Xj3f2SPn36tNl5GjZsKJcuXbrvsZKTk2XdunUyZswYsbe3FwsLC2WpgLttbN68uezYsUMMBsMD22QwGOS1115TzvnCCy888dIARI+LgUJlRt++fQWATJ48uVj7FRQUSGBgoAQGBt73yzQvL0/27NkjM2bMkCZNmhTpvdSqVUsmT54sv/32m/KX/f0YjUapV6+eAFB6K/hz7ZRt27bJN998o/QSKleubPYcx2g0yrFjx2T+/Pni5eWlBMfdn4oVK0qnTp1k3LhxsmzZMklKSnrodWdlZcmAAQMe+IyGqKTxGQqVGYcOHULnzp1hYWGBS5cumY1M+ivFXdfj6tWrykipvXv3Ijc3V9lmaWmJrl27KvNeGjVqpIx+OnToEGbNmoUDBw7A0tJSWUJ40KBBiI6OxsWLF83Oc/jwYcTFxUGv1yM4OFgZ5nyXp6en2fya4tQgS0xMRP/+/REREfHAZzQPYzAYsHXrVgCFs+i5rjw9KQYKlSm9e/fGnj178MILL+Crr756pH2MRiMiIyMBoNgzvnNzc7F//36loOX/zvdwc3ODr68vOnbsiD179iA9PR379u1Damqq8h4PDw+cOXMGANC3b1/Ex8cjOjq6SAUAe3t79OnTB76+vvD29kbt2rUfuZ33On36NPz8/HDt2jW4uLhgy5Yt6NixY7GPwwW2SG0MFCpTDhw4gK5duyrFJB/3S/dxXbx4Uak3tm/fPrOVGbVaLerUqYMKFSrg1KlTRfa9t9dyl5ubGwYNGqTUKLO2tn7guR+lavLevXsxePBgZGRkwN3dHXq9Hg0aNHisazUajTh69CgAoG3btiy9Qk+MgUJlTo8ePbBv3z68/PLL+M9//lNq7cjOzlYKWq5btw6ZmZkP3Uer1aJz587IyMjAyZMnMWrUKKxbt+6RzvewHsOPP/6ISZMmwWAwoHPnzti8eTMqV65c/AsjekoYKFTm7Nu3Dz169ICVlRUuX7780OKQIoJbt24BeHozvmfNmoWTJ08iPz8fx44dQ3p6utl2rVaLqlWrwtXVFfPnz0ft2rXRsmVLaDQanDlzBo0bN37oOR5UNVlE8N577ykz6keOHInvv/8eNjY26l4k0RNiLS8qc7p3746uXbsiPz8fixYteuj7CwoK8OWXX+LLL78scstJLdWqVYOFhQWys7OLhImtrS1MJhMSExNx8uRJDBgwAL6+vqhfvz5E5C9Lq9xLq9WiefPmaN68uRImeXl5GD9+vHKM2bNnY+3ataqEiYggPT0d6enpqq0jQ/9sDBQqk959910AhdV24+PjH/r+/13YSm1t2rRBeHg4wsLCABSGyF2vvvoqJk2ahIYNG6JmzZrQaDRISEhQHvCvW7cOHTp0wHvvvXffIo8PkpaWhn79+uGnn36CTqfDN998gw8//FC19V4KCgqwdOlSLF269KkFMf2zMFCoTOrZsyc6deqEvLy8h/ZSrKysMHPmTMycOfOpjFTKycnB6NGjlbL6zs7OeOmll5TtJpMJ6enp8PLyQkhICGJjY/HVV19h/PjxSnuOHDmCefPmoUGDBmjVqhXeeecd7N+/3+yL/N6qyZcvX0bHjh3xxx9/oEKFCtDr9Zg0aZLq12ZpaanKkslEAJ+hUBm2a9cu9O3bFzY2Nrh69WqplFpPTEyEh4eHsoSvu7s7PDw8kJ+fj+DgYACFywXXqVMH48ePR6dOncz2P3LkCDp06ACNRoNatWrhxo0bZreX7Ozs4OXlhQkTJqBnz5749ttvcePGDWzduhU3b95E7dq1ERQUBE9Pz5K7aKLHVcITKYkemclkkg4dOggAmT59eomf/9ixY2Jra6vMRH/uueckLy9PDh8+LB9//LHyemBg4F/ObPfx8VH2T0pKktWrV8vIkSPF3t7ebLa8RqMRFxcXZRZ9ixYtJC4urgSvmOjJsIdCZVpISAh8fHxga2uLq1evwtXVtch7nsaM78DAQIwbNw5GoxEajQYrV67E5MmTle33roeSlZUFe3v7Bx7rbi9Fp9PhwoULqFevHoDCYcLbt29HWFgYdu/ejRMnTpjt5+Liosyk79Wrl7JaJFFZxWcoVKb169cP7dq1Q25uLj777LP7vsdkMiEqKgpRUVGqrNj41ltvYfTo0TAajbCyssLevXvNwqS42rdvj759+8JoNMLX1xutWnmgVSsPTJkyCU5OTvjggw/MZrpXrVoVtra2SE5OxurVqzFy5EhUrVoV7u7umDNnDiIjI1UZlXU3iLdu3QqDwfDExyNiD4XKvKCgIPj7+8POzg4xMTGoUqWK2XY1Z3w/99xz+OGHHwAUjuQ6derUfWeiF6eHUlBQgKFDB2PPnu3w8AACAuyh1Wqwe7fg9GkNLC0dERsbB41Gg08++QTTp0+HwWDAoUOHlJIwd0u73FWjRg107doVXl5eGDVqVJHP5FGw9AqpjYFCZZ6IoF27doiIiMDbb7+NhQsXqn4Ok8mErl274tChQwCA6tWrIzo6Gs7Ozvd9f3EC5e2330Jg4BdYsCAPPXoYYG9vC0dHRxgMRmzalIKpU03IyNBh7dp1Sg9r6NChZrfuoqKisGnTJpw4cQK7d+82W3RLp9MpBS19fHzQpEmThw4tjo2NRfjRcGzdtxX5xny08miFTi07oWXLlmZDoomKg4FC5cK2bdswYMAA2NvbIyYmRtXnCampqWjWrBkSEhIAAF26dMG+ffv+8kv5UQMlMTERbdo0wzvvFOD55y2QklJYVNLZ2RkZGekwGk1Yv16DhQsrICwsEqtXrwbw1z2GvLw87N+/HytXrsSBAwdw8+ZNs+1OTk7o2LEjXnjhBfTs2bNI2/744w9sOLQByc7JqORZCRY2FsiMz4TxrBGeNp6YNGrSY/V4iBgoVC6ICFq3bo0TJ05g9uzZ+PDDD8223V3+19HRsVilVy5cuIAWLVooJeyfe+45rFq16qH7PWqgfPHFF/j007cQGWmPihW1SElJNSs4qdPpYG3thDZtcvHSS/PQrVs3AMWrmnzx4kVlKeS9e/eaHd/Kygrdu3dHy5YtMXjwYNjY2GD59uXQ9dDhGa9nzI6Tl5WH8+vPo9WdVnh9yuu8BUbFxkChcmPz5s0YNGgQKlSogJiYGOV21OM+C9i7dy+8vb2VyYXFuZ32qIEyZ84cHD68FEFBFsjLy8OdO3eUbZaWFnB2rgytVgNv7yw0a/YCPv3000c6/4NkZGRgw4YNOHjwIPbv34+YmBiz7c41neEyzgVez3nBra4bBPJnWyyh0WiQm56LmC9jMN17Olq2bPlEbaF/Hq6oQ+XGwIED8eyzz+LkyZNYvHixWY2s4s72/vrrr/Hiiy9CRKDT6bBmzRqMGjVKlXYajUYcOXIEer0e33//Pezts5GWBtx7B02j0aBiRUdotYVrpqSmQpXSMY6Ojpg8eTImT54MEcH58+fxyy+/IDAwEOfOnUOqLhWpmam48MMF6Cx0qFSpEipXrgw/Pz+4uLjAtpItTA1MOB51nIFCxcYeCpUrmzZtwtChQ1GxYkXExMTAycmp2MeYOHEifvzxRwCFX+KHDh1CixYtinWM/+2h5OTkYMeOHdDr9dixY4fZAlx2dkBgoA49etjC2toaFhYW0Gg0uHtnLiwsH4MGFeDnn7crVYmfRtXkiIgIzPx2JjJ7ZOJSzCVkZpiX469StQoaNWyECqkV0Dm1M2a/NlvV89PfHwOFyhWTyYRnn30W0dHReO+99zB37txi7evv76+UTHF2dsaZM2fuO1nyYW7fvo2KFSsCAFq3bo3jx4+bzQ1xcnJCv3794OPjg2+//RJabRR++80eTk7mD/ozMkwYMiQbBQWe2Llzn3LL7WkM442JicH8dfPhOskVRmsjUlJSEBUVhaSkJFy/fh1i+rP9FwGrHVbw6+2njByrWbOmqm2hvycGCpU7GzduxPDhw+Ho6IiYmBhUqlTpofvcuXMHbdq0wenTpwEUrqR45syZYpWBT0tLw86dO5UVHZOTk822t2jRQpnZ3r59e2XY78WLFxEQ4ANb2wRMmWKBPn2soNVqsGtXHr75xojMzKr49dcg1K9fH0uXLgUATJs2TfVAMRqN+Gj5RzjsfBj5NfPRuFFj1KxVGBS5ubm4dOkSzkWdw9nlZ5EXlme2b/PmzZVr8/Ly4vrzdF8MFCp3TCYTPD09cebMGcybNw+zZs2CXq8HAPj6+hb5souJiUHbtm2VAAgICMCvv/760FtKIoJTp04pAXL48OH7zsT/z3/+g4EDB/7lX/HXrl3DwoULEBT0KwoKCkeUWVjYwNc3AG+/PUspx/K07d+/H/M3z0d2q2w08WqC+vXrK9tMRhPObTmHWhdrwa+jH/bt24fg4GCEhYWZ9b4qVaqEvn37wtfXF97e3o/Vw6O/JwYKlUvr16/HqFGj4OTkhAsXLihLBf/vraL9+/ejd+/eykiut956Cx9//PEDj5uZmYndu3dDr9cjODi4yFosTZs2ha+vL3r06AFfX18AD5/YeK/k5GRl1nvjxo1RtWrVR79oFRiNRqzfuB6bojfBoZ0DqnpWhaWtJTLjM5FyLAW1U2tj8qDJaNiwoVmb7/bMQkJCkJKSYnbMNm3awMfHB76+vlyb/h+OgULlktFoRLNmzXDu3DmMHj0aFhYWMBqN6NOnD0aNGgUrKyv88ssvGDlypFLg8fPPP8frr79udhwRwdmzZ5VeyIEDB8zqWtnZ2aFXr17Ks4Q6deoAKN5M+dKWlpaGI0eOoG/fvtBqtTCZTDh69CgOHjuIS+mXYIQR9hp7eLl7oXPHzqhRo8YDj3W3zM3dz+vYsWNm2ytXrgxvb2/4+vqiX79+XPP+H4aBQuXW22+/jf8sWoTaABrY2cFCq8VNrRbG6tVRvUkTbN68GUDh5L5ff/0Vfn5+AArD4Pfff1e+FK9du2Z2XHd3d+V5QdeuXe/7nOVpBMrTqJpsMBiwYsUKZGRkoFu3bujevbuyTUSQkpICg8GAChUqPNY1JCYmmo1uuzvBFChc0rh9+/bKZ9miRQvVVpuksomBQuVScHAw3pk0Ca0SEtBfBJ2cnFC5cmWcv3MH38XHY4PJhGsovN9//PhxGAwGJUD++OMP5OX996GztbU1evToAR8fH/j4+MDd3f2h538agfK0ijWePn0ahw4dwqhRo1ChQgVVjnk/BoMBoaGhyud86tQps+3VqlVTPuM+ffo80mAKKl8YKFTumEwmdG/TBi0uXMC7dnZIvXULOq0WdZ55BnHx8biTn4/vAXyv1cJ3/HgcPHgQly5dMjtGnTp14OfnpzwPKe6kwqcRKGpVTRYRFBQUmAWSyWQq8d7BjRs3EBwcDL1ej927dyMrK0vZptPp0KlTJ6X30qxZM9Xn3VDJY6BQubNt2zZ8NH48VtjaopWdHa5du4Z8gwEaAHf/MacCmArg+J+/W1paokuXLsoXWOPGjZ/oC6ysPkMxmUwICQnB9evX8dxzz8Ha2rq0mwSgsKDlwYMHlYA5e/as2fZatWqZLSZ297Ol8oWBQuXOO++8g1NLlmBztWrQajRITklB6p9rvt9roUaD/fXq4dNPP0WvXr1Uvd1TVgPl9u3bWLlyJbKzszF8+HA0adKktJt0X1evXlXCZe/evUpxTqAw/Lt166YMhGjUqBF7L+UEA4XKnVmzZuHcihX4rVo15BcUIC4uDgV/jszSajRwqlQJ9hUqYFZKCq7364evv/4azs7Oqn4pPY1AeZKqyfeKi4tDRkYGPDw8nrhNJSE3Nxd//PGH8uzl8uXLZtvd3NyU3kv37t1VqXlGTwcDhcqdNWvW4KtXXsFX1tawS0mB0WSCTqNBJScn2Nraws7WFreNRgy9eRNO/v5o0qQJOnfujF69eqnWhrL0UP7mzZswGo2oXr36E7ehLLh48aISLvv27TMrx29jY6PMAfL19S2xCaH0aDiGj8qdESNGIN3eHt/fugWDyQQba2vUqVsXlZ2dYffnaoM/p6UhuUIF9OzZE1qtFrVr11b2T09Px7p16xAREVFal/BAlpaWxaqcHBcXh1WrVmHdunVIT09/eg0rQe7u7pg2bRp27NiBlJQUbN26FS+++CKeeeYZ3LlzB8HBwXj11VdRv359NG7cGG+88QZ27dplNnKPSgcL8lC5IiJYvHgxziQkIBuAg06Hl11dYfHniKjbRiPWp6XhBxH0GjcOU6ZMQV5entmcjosXL+LixYvIz89HmzZtlNeTkpJQuXLlUqtTZWVlhdmzi1fht3LlynB0dISNjc3fckEsBwcH9O/fH/3794eI4MyZM0rv5eDBgzh//jzOnz+PJUuWoGLFikhISOAtsVLEW15UbhgMBkydOhVff/01AKB79+7IuHQJjunp8BSBBYDTAJIrVECvceOwcOHC+w6VTU1NxZkzZ+Do6AhPT08AhUN2P/nkE4gIpkyZ8tAZ3mXpoXxWVhZsbGz+cQUb7y2To9frUa9ePRw8eLC0m/WPxkChcuH27dsYPnw4QkJCoNFosGTJErz22mtITk7GqlWrcPLkSRiNRri7u2PSpElKiZRHlZKSgu+//x4igjfffFN5IH7s2DGkpaWhefPmZnW3SitQDAYDtm3bhkaNGpWbh+4l4e6sfxcXl9Juyj8aA4XKvBs3bsDf3x8nT56EnZ0dAgMDMWDAANXPc3eU1b0zuL/55hvEx8djwIABygqGBQUFSE1NRbVq1QCoW3rlr6omA0BYWBh27NgBKysrvP7667D985kRUVnwz+ojU7kTGRkJPz8/xMfHw9XVFdu3bzd77qEmjUZTpBxIhw4dcPHiRTRo0EB57cKFC1i3bp3q5zeZTDhx4gQAwNvb+77vadeuHeLj49GiRQuGCZU5DBQqs4KDgzF8+HBkZWXBw8MDQUFBqFu3bom2wdPTU3nOctetW7eKvE9EEBwcjFq1aqFJkybFXuMeKBx9Vq9ePdjY2Jg9+0lNTYWTkxM0Gg20Wi0GDx5c/AshKgG85UVl0sqVKzF16lQYjUb07NkTmzZtKlPFBJOSksxueeXk5OCLL76ATqfDW2+9pYy4ys3NhY2NzV9OUjx+/Dh+/HEVQkN3AcgHoEPduk0xfPg4NG7cGFu2bEHXrl3RpUuXErgyosfHHgqVKSaTCbNmzcKiRYsAABMmTMDXX39d5obE/m+tKSsrK3Tq1An5+flmbf3tt9+UZzD3Llp1l16vx7x509GwYQbeeccBDRs6IDXVgO3bI/DJJ8fRtGkv1K5dBzdu3ICIsAQJlWkMFCozcnNzMWHCBGzcuBEAMG/ePLzzzjvl4kvU0dERvXv3NnvNZDIhPj4e2dnZcHR0VF5PSEjA5cuXYWdnh/nz34K/fxZmz64FjUbz5xLD1vDyqoBevTIxe/YeNG36OkaMGFEuPgf6Z+MtLyoTbt26hYEDByI0NBSWlpZYtWoVxo4dW9rNeqBHHTZsNBoRGxuLOnXqKIGwa9cuHD58GDExMYiL24Ht22vAykoLo9GExMQEAED16tWh1Wrx7rvxiIryxKZNQVyciso8/gulUnfhwgV4eXkhNDQUlSpVws6dO8t0mBSHTqdD3bp1zXoXNWrUgLu7O65fPwdvb4t7wiRRec/dIpEDBzoiLu58kfVciMoiBgqVqoMHD8LLywuXL19G3bp1cfjwYbNlav+OmjZtitGjR0PEiCpVCu86F9ahElhbW0On0yk9nsLtRrPFqYjKKj5DoVKzfv16TJgwAfn5+WjXrh22bt0KV1fX0m5WiXFxqYbLl+MAAHZ2trCyKrx2rVYHrbawR3PlSh4AS84Ap3KBPRQqcSKCBQsWYNSoUcjPz8egQYPw+++//6PCBAB8fQdj925BWlrhWi4WFhawsLBQwkREsGFDJpo188IzzzxTmk0leiQMFCpRBQUFmDx5slJVd/r06di4ceM/skLswIEDYWvrhjffTEBGhsFsm8kk+OKLm4iIsMWECZNKqYVExcNRXlRiMjMzMXToUOzatQtarRbLli3D1KlTS7tZj0Wt4pCnT5/GtGmTYTDEwNtbB3d3a6SmGhEUdAfx8RUwbdp7GDNmjJpNJ3pqGChUImJjY+Hn54eoqCjY2dnh559/hr+/f2k367GpWW04OTkZv/32G7Zv34ikpDjY2dmja1cfDB8+ghWFqVxhoNBTd+LECfj5+SEhIQHVqlXD9u3b0bp169Ju1hMpS+uhEJUVfIZCT5Ver0eXLl2QkJCApk2b4siRI+U+TIjo/hgo9NR88cUX6N+/P7Kzs9G7d28cOnSIo5WI/sYYKKQ6k8mEmTNnYurUqTCZTHj++eeh1+vN6lkR0d8PJzaSqkQEY8eORWBgIADggw8+wOzZs1nYkOgfgD0UUpVGo0GfPn1gZWWFtWvXYs6cOQwTon8IjvKip+L69et/6+clHOVFVBR7KPRU/J3DhIjuj4FCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCo2ISGk3gqi8ERHk5OQAAOzs7KDRaEq5RUSlj4FCRESq4C0vIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVMFAISIiVTBQiIhIFQwUIiJSBQOFiIhUwUAhIiJVMFCIiEgVDBQiIlIFA4WIiFTBQCEiIlUwUIiISBUMFCIiUgUDhYiIVPH/wsMTLSg3jOoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(5, 5))\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "theta_1 = np.pi / 6\n",
    "R_x1 = np.array([[1, 0, 0], \n",
    "                 [0, np.cos(theta_1), -np.sin(theta_1)], \n",
    "                 [0, np.sin(theta_1), np.cos(theta_1)]])\n",
    "\n",
    "rotated_cube = cube @ R_x1.T \n",
    "\n",
    "plot_cube(ax, cube, rotated_cube)\n",
    "plt.savefig('1.svg')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b756183-8542-4139-872a-fc6a66a831fc",
   "metadata": {},
   "source": [
    "## 绕 x2 轴旋转"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "91c506dc-5392-4f12-8104-1d84af42975c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAGVCAYAAADZmQcFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEbklEQVR4nO3dd1hWdf8H8PfNEhCRIQIuREXc4t5p4gI0zVmZWvpoltnOlRnl6mfacjTV0lIzyxUg4kJx40AwNxoyZMme9/j8/jBP3gKKcBSp9+u6vC69zznf8z3383Te9znfpRERARERUTmZVHQFiIjo34GBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSrMKroCRJWRiCA3NxcAYG1tDY1GU8E1Iqp4fEIhKoPc3FzY2NjAxsZGCRai/zoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChER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kSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREamCgUJERKpgoBARkSoYKEREpAoGChERqYKBQkREqmCgEBGRKhgoRESkCgYKERGpgoFCRESqYKAQEZEqGChERKQKBgoREani/wG3P93kz50+zQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(5, 5))\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "theta_2 = np.pi / 6\n",
    "R_x2 = np.array([[np.cos(theta_2), 0, np.sin(theta_2)], \n",
    "                 [0, 1, 0], \n",
    "                 [-np.sin(theta_2), 0, np.cos(theta_2)]])\n",
    "rotated_cube = cube @ R_x2.T \n",
    "plot_cube(ax, cube, rotated_cube)\n",
    "plt.savefig('2.svg')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be0a7048-6d33-4727-acb6-0ec3f8d62a38",
   "metadata": {},
   "source": [
    "## 绕 x3 轴旋转"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f512900c-0cc3-4bfe-b0bb-f6c65eb419c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAGVCAYAAADZmQcFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2cklEQVR4nO3deVhV1f4/8PcZQMCDCILiBI4oooaaCorzCM6KpuXUgA3eBvVSZtbPLNPb13sb7FrZveZQapilpIhDmibikIKCyiQOCDLKPJ1p/f6gzvU4Miwmfb+ep+eBvfc5e22q8z5r77U+SyGEECAiIqoiZW03gIiIHg0MFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCQFA4WIiKRgoBARkRQMFCIikoKBQkREUjBQiIhICgYKERFJwUAhIiIpGChERCSFurYbQFQfCSFQVFQEALCxsYFCoajlFhHVPvZQiCqhqKgIGo0GGo3GFCxEjzsGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQi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BQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFIwUIiISAoGChERScFAISIiKRgoREQkBQOFiIikYKAQEZEUDBQiIpKCgUJERFL8fyva6cq7oYK+AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(5, 5))\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "theta_3 = np.pi / 6\n",
    "R_x3 = np.array([[np.cos(theta_3), -np.sin(theta_3), 0], \n",
    "                 [np.sin(theta_3), np.cos(theta_3), 0], \n",
    "                 [0, 0, 1]])\n",
    "\n",
    "rotated_cube = cube @ R_x3.T \n",
    "plot_cube(ax, cube, rotated_cube)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e704ae0-9eeb-47e8-90eb-624498c61d43",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
